package com.tunan.system.dic.service;

import java.util.List;
import java.util.Map;

import javax.jws.WebService;

import com.tunan.system.persistence.model.BscDicCodeItem;
import com.tunan.system.persistence.model.BscDicCodeType;

/**
 * 业务字典接口
 */
@WebService
public interface IBscDicCodeService {

	/**
	 * 本类全名
	 */
	String NAME = "com.augurit.ads.bsc.sc.dic.code.service.IBscCodeService";

	/**
	 * 根据ID获取数据字典选项Form对象
	 * 
	 * @param itemId
	 *            数据字典选项主键
	 * @return 数据字典选项Form对象
	 */
	BscDicCodeItem getItemByItemId(String itemId);

	/**
	 * 根据ID获取数据字典选项Form对象
	 * 
	 * @param itemId
	 *            数据字典选项主键
	 * @return 数据字典选项Form对象
	 */
	BscDicCodeItem getItemByItemCode(String typeCode, String itemCode);

	/**
	 * 根据ID获取数据字典类型Form对象
	 * 
	 * @param typeId
	 *            数据字典类型主键
	 * @return 数据字典类型Form对象
	 */
	BscDicCodeType getTypeByTypeId(String typeId);

	/**
	 * 根据数据字典类型编号获取数据字典类型Form对象
	 * 
	 * @param typeCode
	 *            数据字典类型编号
	 * @return 数据字典类型Form对象
	 */
	BscDicCodeType getTypeByTypeCode(String typeCode);

	/**
	 * 根据数据字典类型ID获取关联的已生效的数据字典项列表
	 * 
	 * @param typeId
	 *            数据字典类型ID
	 * @return 已生效的数据字典项Form对象列表
	 */
	List<BscDicCodeItem> getActiveItemsByTypeId(String typeId);

	/**
	 * 根据数据字典类型ID获取关联的所有数据字典项列表
	 * 
	 * @param typeId
	 *            数据字典类型ID
	 * @return 所有数据字典项Form对象列表
	 */
	List<BscDicCodeItem> getAllItemsByTypeId(String typeId);

	/**
	 * 分页查询子项
	 * 
	 * @param typeId
	 *            数据字典类型ID
	 * @param itemKeyword
	 *            查询关键字
	 * @param pager
	 *            分页对象
	 * @return 查询后的分页对象
	 */
	List<BscDicCodeItem> pfindItems(String typeId, String itemKeyword);

	/**
	 * 分页查询数据字典类型
	 * 
	 * @param typeKeyword
	 *            查询关键字，允许为NULL
	 * @param pager
	 *            分页对象
	 * @return 查询后的分页对象
	 */
	List<BscDicCodeType> pfindTypes(String typeKeyword);

	/**
	 * 保存多个数据字典子项
	 * 
	 * @param forms
	 *            要保存的数据字典子项集合
	 */
	void saveItems(List<BscDicCodeItem> forms);

	/**
	 * 保存多个数据字典类型对象
	 * 
	 * @param forms
	 *            要保存的数据字典类型对象集合
	 */
	void saveTypes(List<BscDicCodeType> forms);

	/**
	 * 根据主键ID删除对应的数据字典子项及所有递归子项
	 * 
	 * @param itemId
	 *            数据字典项ID
	 * @return true ：删除成功 ， false ：删除不成功
	 */
	boolean deleteItemCascadeByItemId(String itemId);

	/**
	 * 根据子项ID列表删除指定子项数据并返回没删除成功的数目
	 * 
	 * @param itemIds
	 *            子项ID数组
	 * @return 没删除成功的数目
	 */
	int deleteItemsCascadeByItemIds(String... itemIds);

	/**
	 * 根据主键ID删除数据字典类型对象
	 * 
	 * @param typeId
	 *            数据字典类型主键ID
	 * @return 被删除的类型对象的类型编号列表
	 */
	void deleteTypeCascadeByTypeId(String typeId);

	/**
	 * 删除多个未锁定的字典类型
	 */
	void deleteTypes(String[] typeIds);

	/**
	 * 删除数据字典类型及所有数据字典子项
	 * 
	 * @param typeCode
	 *            数据字典类型编号
	 */
	void deleteTypeCascadeByTypeCode(String typeCode);

	/**
	 * 获取所有数据字典类型
	 * 
	 * @return 所有数据字典类型
	 */
	List<BscDicCodeType> getAllTypes(Map<String, Object> params);

	/**
	 * 获取所有数据字典子型
	 * 
	 * @return 所有数据字典子型
	 */
	List<BscDicCodeItem> getAllItems(Map<String, Object> params);

	/**
	 * 获取需要导出的数据字典子项记录
	 * 
	 * @param typeIds
	 *            要导出的数据字典类型的ID数组集合，如果typeIds数据长度为0，则导出所有的数据字典类型记录
	 * @return 数据字典子项记录集合
	 */
	List<BscDicCodeItem> findExportItems(String[] typeIds);

	/**
	 * 保存数据字典子项Form对象
	 * 
	 * @param form
	 *            数据字典子项Form对象
	 */
	void saveItem(BscDicCodeItem form);

	/**
	 * 保存数据字典类型Form对象
	 * 
	 * @param form
	 *            数据字典类型Form对象
	 */
	void saveType(BscDicCodeType form, String oldtypeCode);

	/**
	 * 修改数据字典类型启用状态以及关联子项启用状态
	 * 
	 * @param typeId
	 *            数据字典类型主键
	 * @param typeIsActive
	 *            指定要修改的启用状态
	 */
	void updateTypeIsActiveField(String typeId, String typeIsActive);

	/**
	 * 修改数据字典子项启用状态
	 * 
	 * @param itemId
	 *            数据字典子项主键
	 * @param itemIsActive
	 *            指定要修改的启用状态
	 */
	void updateItemIsActiveField(String itemId, String itemIsActive);

	/**
	 * 根据数据字典类型ID获取一个树
	 * 
	 * @param typeId
	 *            数据字典类型ID
	 * @return 数据字典类型树对象，包含所有子孙节点
	 */
	BscDicCodeType tgetTypeAllByTypeId(String typeId);

	/**
	 * 根据数据字典类型编号获取关联的已生效的数据字典项列表
	 * 
	 * @param typeCode
	 *            数据字典类型编号
	 * @return 已生效的数据字典项Form对象列表
	 */
	List<BscDicCodeItem> getActiveItemsByTypeCode(String typeCode);

	/**
	 * 根据数据字典类型编号获取一个树
	 * 
	 * @param typeCode
	 *            数据字典类型编号
	 * @return 数据字典类型树对象，包含所有子孙节点
	 */
	BscDicCodeType tgetTypeAllByTypeCode(String typeCode);

	/**
	 * 根据数据字典类型ID获取一个启用节点组成的树
	 * 
	 * @param typeId
	 *            数据字典类型ID
	 * @return 数据字典类型树对象，包含所有启用的子孙节点
	 */
	BscDicCodeType tgetTypeActiveByTypeId(String typeId);

	/**
	 * 根据数据字典类型编号获取一个启用节点组成的树
	 * 
	 * @param typeCode
	 *            数据字典类型编号
	 * @return 数据字典类型树对象，包含所有启用的子孙节点
	 */
	BscDicCodeType tgetTypeActiveByTypeCode(String typeCode);

	/**
	 * 
	 * @param params
	 * @return List<BscDicCodeItem>
	 * @Description TpecodeAndItemode查找
	 * @date 2016年4月8日
	 * @author kinda
	 */
	List<BscDicCodeItem> selectByTypecodeAndItemode(Map<String, Object> params);
	
	
	//**************************************************************************
	/**
	 * TODO 转换生成键值对数据 <br><pre>
	 * 编写者：yangjian@toonan.com
	 * 创建时间：2016年4月11日 下午5:47:21 </pre>
	 * @param 参数类型 参数名 说明
	 * @return List<BscDicCodeItem> 说明
	 * @throws 异常类型 说明
	 */
	//**************************************************************************
	List<BscDicCodeItem> findConvertItems(String typeCode,String[] itemCodes);

}
